package 滑动窗口And双指针.双指针;

import java.util.Arrays;
/**
 * 这里 就需要  扯到  对 排序 进行
 * 一个 系统的 复习 了
 * 
 * 	Integer [] values = {3,1,2,4};
 * 
 * Arrays.sort(values,(o1,o2) -> (o2  - o1));
 * 用 Java 自带的 排序 怎么 去定义 这种   奇偶排序 的 规则
 *实现 奇偶排序
 * 
 * @author I adore you
 *
 */
public class leetcode905按照奇偶排序 {

	public static void main(String []args) {
//		Integer values [] = {2,4,1,3};
		int nums [] = {3,1,2,4};
		Integer [] values = {3,1,2,4};
//		Arrays.sort(values,(o1,o2) -> ((o1 & 1) - (o2 & 1)));
		Arrays.sort(values,(o1,o2) -> (o2  - o1));
		System.out.println(Arrays.toString(values));
		System.out.println(Arrays.toString(solution(nums)));
		System.out.println((2 & 1) - (1 & 1));
	}
	/**
	 * 自己的 代码  4 ms （实际 执行 0 ms 或者 1 ms）
	 * 为啥  是 4 ms 因为 
	 * 你 在 solution 中多写 了 一行 
	 * System.out.prinln(Arrays.toString(nums));
	 * 这一行 语句 占执行 时间的  3ms  了
	 */
	public static int [] solution(int nums[]) {
		for(int i = 0,j = nums.length - 1;i < j ;) {
			if((nums[i] & 1) == 1  &&  (nums[j] & 1) == 0) {
//				 swap(nums,i++ ,j--)
				swap(nums,i,j);
				i++;
				j--;
			}
			else if((nums[i] & 1) == 0 && (nums[j] & 1) == 0) {
				i++;
			}
			else if((nums[i] & 1) == 1 && (nums[j] & 1) == 1) {
				j--;
			}
			else {
				i++;
				j--;
			}
				
		}
		/**
		 * 下面 这行 打印 语句 他妈 的 占了 3 ms
		 */
//		System.out.println(Arrays.toString(nums));
		return nums;
	}
	static void swap(int nums [] ,int i, int j) {
		int temp = nums[i];
		nums[i] = nums[j];
		nums[j] = temp;
	}
	/**
	 * 宫水三叶的 题解 
	 * 0 ms
	 *他这种 方法 实质 是 没有 上面的 我的那个 快 （只是 常数 时间的 优化）
	 *O（N）  而 我的 也是 O（N） 但 就是 快一点 吧
	 *比较简洁  
	 *这种方法的 思想 是  有点 类似于        *** 快速 排序  ***
	 */
    public int[] sortArrayByParity(int[] nums) {
        int n = nums.length;
        for (int i = 0, j = n - 1; i < j; i++) {
            if (nums[i] % 2 == 1) {
                int c = nums[j];
                nums[j--] = nums[i];
                nums[i--] = c;
            }
        }
        return nums;
    }
	
}
